
#!/bin/bash

# 定义颜色
RED='\033[0;31m'        # 红色
GREEN='\033[0;32m'      # 绿色
YELLOW='\033[1;33m'     # 黄色
BLUE='\033[0;34m'       # 蓝色
NC='\033[0m'            # 默认颜色（恢复为终端默认颜色）

# 定义宿主机路径和容器内路径
HOST_NEXUS_DATA_PATH="/opt/nexus/data"
CONTAINER_NEXUS_DATA_PATH="/nexus-data"
NEXUS_CONTAINER_NAME="nexus3"
NEXUS_IMAGE="sonatype/nexus3:latest"

# 菜单函数
show_menu() {
    clear
    echo -e "${BLUE}======================================"
    echo -e "${BLUE}          Nexus3 安装与管理          "
    echo -e "${BLUE}======================================"
    echo -e "${YELLOW}1.${NC} 安装 Nexus3"
    echo -e "${YELLOW}2.${NC} 卸载 Nexus3"
    echo -e "${YELLOW}3.${NC} 设置配置参数"
    echo -e "${YELLOW}4.${NC} 退出"
    echo -e "${BLUE}======================================"
    # 使用 echo 打印提示，确保颜色可以正确解析
    echo -e "${YELLOW}请选择操作 (1-4): ${NC}"
    read choice
    case $choice in
        1) install_nexus3 ;;
        2) uninstall_nexus3 ;;
        3) set_config ;;
        4) exit 0 ;;
        *) echo -e "${RED}无效选择，请重新输入。${NC}" && show_menu ;;
    esac
}

# 安装 Nexus3 函数
install_nexus3() {
    echo -e "${GREEN}正在安装 Nexus3...${NC}"

    # 1. 检查宿主机目录是否存在，若不存在则创建
    if [ ! -d "$HOST_NEXUS_DATA_PATH" ]; then
        echo -e "${YELLOW}创建宿主机目录: $HOST_NEXUS_DATA_PATH${NC}"
        sudo mkdir -p "$HOST_NEXUS_DATA_PATH"
    fi

    # 2. 设置宿主机目录权限，确保容器能读写
    echo -e "${YELLOW}设置宿主机目录权限...${NC}"
    sudo chown -R 200:200 "$HOST_NEXUS_DATA_PATH"
    sudo chmod -R 775 "$HOST_NEXUS_DATA_PATH"

    # 3. 确保容器需要的子目录存在（log、tmp、instances等）
    echo -e "${YELLOW}检查并创建容器需要的子目录...${NC}"
    sudo mkdir -p "$HOST_NEXUS_DATA_PATH/log"
    sudo mkdir -p "$HOST_NEXUS_DATA_PATH/tmp"
    sudo mkdir -p "$HOST_NEXUS_DATA_PATH/instances"

    # 设置子目录权限
    echo -e "${YELLOW}设置子目录权限...${NC}"
    sudo chown -R 200:200 "$HOST_NEXUS_DATA_PATH/log" "$HOST_NEXUS_DATA_PATH/tmp" "$HOST_NEXUS_DATA_PATH/instances"
    sudo chmod -R 775 "$HOST_NEXUS_DATA_PATH/log" "$HOST_NEXUS_DATA_PATH/tmp" "$HOST_NEXUS_DATA_PATH/instances"

    # 4. 启动 Docker 容器
    echo -e "${GREEN}启动 Nexus3 容器...${NC}"
    docker run -d \
      --name "$NEXUS_CONTAINER_NAME" \
      --restart always \
      -p 8081:8081 \
      -p 6000:6000 \
      -p 6001:6001 \
      -v "$HOST_NEXUS_DATA_PATH:$CONTAINER_NEXUS_DATA_PATH" \
      -e INSTALL4J_ADD_VM_PARAMS="-Xms128m -Xmx512m -XX:MaxDirectMemorySize=512m -Djava.util.prefs.userRoot=$CONTAINER_NEXUS_DATA_PATH/javaprefs" \
      -e TZ=Asia/Shanghai \
      "$NEXUS_IMAGE"

    echo -e "${GREEN}Nexus3 容器安装完成.${NC}"
    show_menu
}

# 卸载 Nexus3 函数
uninstall_nexus3() {
    echo -e "${RED}正在卸载 Nexus3...${NC}"

    # 1. 停止并删除容器
    echo -e "${YELLOW}停止并删除容器: $NEXUS_CONTAINER_NAME${NC}"
    docker stop "$NEXUS_CONTAINER_NAME"
    docker rm "$NEXUS_CONTAINER_NAME"

    # 2. 删除宿主机上的数据目录
    echo -e "${YELLOW}删除宿主机数据目录: $HOST_NEXUS_DATA_PATH${NC}"
    sudo rm -rf "$HOST_NEXUS_DATA_PATH"

    echo -e "${RED}Nexus3 已卸载.${NC}"
    show_menu
}

# 设置配置参数函数
set_config() {
    echo -e "${YELLOW}设置配置参数...${NC}"

    # 让用户输入要设置的路径
    read -p "${YELLOW}请输入 Nexus 数据目录 (默认: /opt/nexus/data): ${NC}" input_path
    if [ ! -z "$input_path" ]; then
        HOST_NEXUS_DATA_PATH="$input_path"
    fi

    # 让用户输入所需的端口
    read -p "${YELLOW}请输入绑定的端口 (默认: 8081): ${NC}" input_port
    if [ ! -z "$input_port" ]; then
        NEXUS_PORT="$input_port"
    else
        NEXUS_PORT="8081"
    fi

    echo -e "${GREEN}配置已更新：${NC}"
    echo -e "${YELLOW}Nexus 数据目录:${NC} $HOST_NEXUS_DATA_PATH"
    echo -e "${YELLOW}绑定端口:${NC} $NEXUS_PORT"

    show_menu
}

# 运行菜单
show_menu

